/**
 * Description:
 * Class Name:TreeSetTest3
 * Date:2022/3/5 11:57
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第8章_Java集合._8_3_Set集合._8_3_3_TreeSet类;

import java.util.TreeSet;

class R implements Comparable{
    int count;
    public R(int count){
        this.count = count;
    }
    public String toString(){
        return "R[count:" + count + "]";
    }
    // 重写equals()方法，根据count来判断是否相等
    public boolean equals(Object obj){
        if (this == obj) return true;
        if (obj != null && obj.getClass() == R.class){
            var r = (R) obj;
            return r.count == this.count;
        }
        return false;
    }
    // 重写compareTo()方法，根据count来比较大小
    public int compareTo(Object obj){
        var r = (R) obj;
        return count > r.count ? 1 : count < r.count ? -1 : 0;
    }
}

public class TreeSetTest3 {
    public static void main(String[] args) {
        var ts = new TreeSet();
        ts.add(new R(5));
        ts.add(new R(-3));
        ts.add(new R(9));
        ts.add(new R(-2));
        // 打印TreeSet集合，集合元素是有序排列的————自然排序
        System.out.println(ts);                                                 // ①
        // 取出第一个元素
        var first = (R)ts.first();
        // 然后对第一个元素的count赋值
        first.count = 20;
        // 再取出最后一个元素
        var last = (R)ts.last();
        last.count = -2;
        // 再次输出将会看到现在TreeSet集合中的元素已处于无序状态，而且还有重复元素
        System.out.println(ts);                                                 // ②

        // 删除实例变量被改变的元素，删除失败
        System.out.println("---------------start deleting---------------");
        System.out.println(ts.remove(new R(-2)));                           // ③
        System.out.println(ts);

        // 删除实例变量从未被改变的元素，则可以删除成功
        System.out.println(ts.remove(new R(5)));                            // ④
        System.out.println(ts);
        System.out.println(ts.remove(new R(-2)));
        System.out.println(ts);
        System.out.println(ts.remove(new R(-2)));
        System.out.println(ts);
    }
}
//[R[count:-3], R[count:-2], R[count:5], R[count:9]]
//[R[count:20], R[count:-2], R[count:5], R[count:-2]]
//---------------start deleting---------------
//false
//[R[count:20], R[count:-2], R[count:5], R[count:-2]]
//true
//[R[count:20], R[count:-2], R[count:-2]]
//true
//[R[count:20], R[count:-2]]
//true
//[R[count:20]]
